// es最新标准编码
// 标准库是内置对象的声明
export {}
// 对象
// const foo:object = function(){} // [] // {}
// const obj:{foo:number,bar:string} = {
//     foo:123,
//     bar:'qweqw'
// }

// 数组

const arr :number[] = []

function sum (...args:number[]) {
    return args.reduce((prev,current)=> prev+current,0)
}

// sum(1,2,3,4,'2')

// 元组类型
const tuple:[number, string] = [18,'123']
// const age = tuple[0]

const [age,name] = tuple

// 枚举类型

// const PostStatus = {
//     Draft:0,
//     Unpublished:1,
//     Published:2
// }
const enum PostStatus{
    Draft=0,
    Unpublished=1,
    Published=2
}

const post = {
    title:'qqq',
    content:'tdtd',
    status: PostStatus.Draft // 0未发布， 1已发布 // 2撤回
}

// 函数类型
// 函数声明

function fun1(a:number,b?:number,c:number = 20):string{
    return '123'
}

fun1(1,3)
fun1(1)

// 任意类型
// any不要轻易使用
function stringify(value:any) {
    return JSON.stringify(value)
}

stringify('123')
stringify(100)
stringify(true)

let age123 = 100;
// age123 = '100'

let foo
foo = 100
foo = '100'

// 类型断言
const nums = [1,2,3,4,5,6]
const res = nums.find(i=>1>0)
// as
const num1 = res as number
const quare = num1*num1
// <> react中会有冲突
const num2 = <number>res

// 接口

// 定义接口
interface Post {
    title:string
    content:string
    suntitle?:string // 可选成员
    readonly summary:string // 只读
}
function printPost(post:Post) {
    console.log(post.title)
    console.log(post.content)
}

printPost({
    title:'123',
    content:'12213',
    summary:'xixi'
})

interface Cache{
    [prop:string]: string
}







